home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / jade / man / jade.info-10 (.txt) < prev    next >
GNU Info File  |  1995-03-09  |  36KB  |  687 lines

  1. This is Info file jade.info, produced by Makeinfo-1.55 from the input
  2. file jade.texi.
  3. START-INFO-DIR-ENTRY
  4. * Jade: (jade).            An editor for X11 and AmigaDOS
  5. END-INFO-DIR-ENTRY
  6.    This is Edition 1.3, last updated 7 October 1994, of `The Jade
  7. Manual', for Jade, Version 3.2.
  8.    Jade is a text editor for X11 (on Unix) and the Amiga.
  9.    Copyright 1993, 1994 John Harper.
  10.    Permission is granted to make and distribute verbatim copies of this
  11. manual provided the copyright notice and this permission notice are
  12. preserved on all copies.
  13.    Permission is granted to copy and distribute modified versions of
  14. this manual under the conditions for verbatim copying, provided that
  15. the entire resulting derived work is distributed under the terms of a
  16. permission notice identical to this one.
  17. File: jade.info,  Node: Process Objects,  Next: Asynchronous Processes,  Up: Processes
  18. Process Objects
  19. ---------------
  20.    A "process object" is a type of Lisp object used to provide a link
  21. between a `physical' process running in the operating system and Jade's
  22. Lisp system. Each process object consists of a number of components
  23. (references to other Lisp objects); these components are used when the
  24. object is used to run a subprocess.
  25.    Process objects which aren't currently being used to run a subprocess
  26. store the exit value of the last subprocess which was run on that
  27. object.
  28.  - Function: processp OBJECT
  29.      This function returns `t' when its argument is a process object.
  30.    The programmer-accessible components of a process object are,
  31. "Output stream"
  32.      A normal Lisp output stream (*note Output Streams::.), all data
  33.      which the subprocess outputs to its `stdout' channel is copied to
  34.      this output stream. *Note Process I/O::.
  35. "State change function"
  36.      A Lisp function, called each time the state of the subprocess
  37.      being run on the object changes. *Note Process States::.
  38. "Program name"
  39.      The name of the program (a string) to execute when the subprocess
  40.      is created.
  41. "Program arguments"
  42.      A list of strings defining the arguments which the program executed
  43.      is given.
  44. "Directory"
  45.      When a subprocess is started its current working directory is set
  46.      to the directory named by this component of its process object.
  47. "Connection type"
  48.      Asynchronous subprocesses (*note Asynchronous Processes::.) use
  49.      this component to decide how to connect to the I/O channels of the
  50.      subprocess.  Current options include pseudo-terminals and pipes.
  51.  - Function: make-process &optional OUTPUT-STREAM STATE-FUNCTION
  52.           DIRECTORY PROGRAM ARGS
  53.      This functions creates and returns a new process object. *No
  54.      subprocess will be started.*
  55.      The optional arguments are used to define the values of the
  56.      components of the new process object, any undefined components
  57.      will be set to default or null values.
  58.    For each component of a process object two functions exist; one to
  59. read the component's value in a specific process object, the other to
  60. set the component's value.
  61.  - Function: process-prog PROCESS
  62.      Returns the value of the program name component of the process
  63.      object PROCESS.
  64.  - Function: set-process-prog PROCESS PROG-NAME
  65.      Sets the value of the program name component of the process object
  66.      PROCESS to the string PROG-NAME, then returns PROG-NAME.
  67.  - Function: process-args PROCESS
  68.      Returns the value of the program arguments component of the
  69.      process object PROCESS.
  70.  - Function: set-process-args PROCESS ARG-LIST
  71.      Sets the value of the program arguments component of the process
  72.      object PROCESS to the list ARG-LIST, then returns ARG-LIST.
  73.  - Function: process-dir PROCESS
  74.      Returns the value of the directory component of the process object
  75.      PROCESS.
  76.  - Function: set-process-directory PROCESS DIRECTORY
  77.      Sets the value of the directory component of the process object
  78.      PROCESS to the string DIRECTORY, then returns DIRECTORY.
  79. File: jade.info,  Node: Asynchronous Processes,  Next: Synchronous Processes,  Prev: Process Objects,  Up: Processes
  80. Asynchronous Processes
  81. ----------------------
  82.    An "asynchronous process" is one that runs in parallel with the
  83. editor, basically this means that once the subprocess has been started
  84. (by the `start-process' function) Jade will carry on as normal.
  85.    The event loop checks for output from asynchronous processes, any
  86. found is copied to the process' output stream, and calls the the
  87. process' state change function when necessary (*note Process States::.).
  88.    When using asynchronous processes you have a choice as to the Unix
  89. mechanism used to connect the `stdin', `stdout' and `stderr' streams of
  90. the subprocess to Jade's process (note that whatever the choice
  91. `stdout' and `stderr' always go to the same place).
  92.    The two options currently available are pipes or pseudo-terminals; in
  93. general pseudo-terminals should only be used to provide a direct
  94. interface between the user and a process (i.e. the `*shell*' buffer)
  95. since they allow job control to work properly. At other times pipes
  96. will be more efficient and are used by default.
  97.  - Function: start-process &optional PROCESS-OBJECT PROGRAM &rest ARGS
  98.      This function starts an asynchronous subprocess running on the
  99.      process object PROCESS-OBJECT. If PROCESS-OBJECT is undefined a
  100.      new process object is created (by calling the function
  101.      `make-process' with all arguments undefined).
  102.      The function always returns the process object which the subprocess
  103.      has been started on. If for some reason the subprocess can't be
  104.      created an error of type `process-error' is signalled.
  105.      The optional argument PROGRAM is a string defining the name of the
  106.      program to execute, it will be searched for in all the directories
  107.      in the `PATH' environment variable. The ARGS are strings to pass
  108.      to the subprocess as its arguments.
  109.      When defined, the optional arguments overrule the values of the
  110.      related components of the process object.
  111.      The following example runs the `ls' program asynchronously, its
  112.      output is inserted into the current buffer.
  113.           (let
  114.               ((process (make-process (current-buffer))))
  115.             (start-process process "ls" "-s"))
  116.    Note that when Jade terminates it kills all of its asynchronous
  117. subprocesses which are still running without warning.
  118.  - Function: process-connection-type PROCESS
  119.      Returns the value of the connection type component of the process
  120.      object PROCESS. See the documentation of the
  121.      `set-process-connection-type' function for the values this may
  122.      take.
  123.  - Function: set-process-connection-type PROCESS SYMBOL
  124.      Sets the value of the connection type component of the process
  125.      object PROCESS to SYMBOL, then returns SYMBOL.
  126.      SYMBOL should be one of the following symbols,
  127.     `pty'
  128.           Use pseudo-terminals to connect to subprocesses running
  129.           asynchronously on this process object.
  130.     `pipe'
  131.           Use standard Unix pipes to connect, this is the default value
  132.           of this component.
  133. File: jade.info,  Node: Synchronous Processes,  Next: Process I/O,  Prev: Asynchronous Processes,  Up: Processes
  134. Synchronous Processes
  135. ---------------------
  136.    When a "synchronous process" is started Jade waits for it to
  137. terminated before continuing; they are usually used when a Lisp program
  138. must invoke an external program as part of its function, i.e. the
  139. auto-compression feature runs the compression program `gzip'
  140. synchronously when it needs to compress a buffer.
  141.    Unlike asynchronous processes their is no choice between pipes and
  142. pseudo-terminals for connecting to a subprocess. Instead, it is possible
  143. to link the `stdin' channel of a synchronous process to a named file.
  144.  - Function: run-process &optional PROCESS-OBJECT INPUT-FILE-NAME
  145.           PROGRAM &rest ARGS
  146.      This function starts a process running on the process object
  147.      PROCESS-OBJECT. If PROCESS-OBJECT is undefined a new process object
  148.      is created by calling the `make-process' function.
  149.      If defined, the string INPUT-FILE-NAME names the file to connect to
  150.      the standard input of the subprocess, otherwise the subprocess'
  151.      input comes from the null device (`/dev/null').
  152.      The optional arguments PROGRAM and ARGS define the name of the
  153.      program to invoke and any arguments to pass to it. The program
  154.      will be searched for in all directories listed in the `PATH'
  155.      environment variable.
  156.      If any of the optional parameters are unspecified they should have
  157.      been set in the PROCESS-OBJECT prior to calling this function.
  158.      After successfully creating the new subprocess, this function
  159.      simply copies any output from the process to the output stream
  160.      defined by the output stream component of the process object. When
  161.      the subprocess exits its exit-value is returned (an integer). Note
  162.      that the exit-value is the value returned by the
  163.      `process-exit-value' function, see *Note Process Information::.
  164.      If, for some reason, the new subprocess can't be created an error
  165.      of type `process-error' is signalled.
  166.    The following function definition is taken from the `gzip.jl' file,
  167. it shows how the `run-process' function can be used to uncompress a
  168. file into a buffer.
  169.      ;; Uncompress FILE-NAME into the current buffer
  170.      (defun gzip-uncompress (file-name)
  171.        (let
  172.            ((proc (make-process (current-buffer))))
  173.          (message (concat "Uncompressing `" file-name "'") t)
  174.          ;; gunzip can do .Z files as well
  175.          (unless (zerop (run-process proc nil "gunzip" "-c" file-name))
  176.            (signal 'file-error (list "Can't gunzip file" file-name)))))
  177. File: jade.info,  Node: Process I/O,  Next: Process States,  Prev: Synchronous Processes,  Up: Processes
  178. Process I/O
  179. -----------
  180.    It is only possible for lisp programs to explicitly send input data
  181. to *asynchronous* processes (by the time it's possible to call a
  182. function to send data to a synchronous process, the process will
  183. already have terminated!). Simply use the process object which an
  184. asynchronous process is running on as a normal Lisp input stream, any
  185. strings or characters written to the stream will immediately be copied
  186. to the `stdin' channel of the subprocess.
  187.    With synchronous processes, the only control over input data
  188. possible is by giving the `run-process' function the name of a file
  189. containing the subprocess' input data.
  190.    Output data from subprocesses is handled the same way by both
  191. asynchronous and synchronous processes: it is simply copied to the
  192. stream defined by the output stream component of the subprocess'
  193. process object.
  194.  - Function: process-output-stream PROCESS
  195.      Returns the value of the output stream component of the process
  196.      object PROCESS.
  197.  - Function: set-process-output-stream PROCESS STREAM
  198.      Sets the value of the output stream component of the process object
  199.      PROCESS to the stream STREAM, then returns STREAM.
  200.    *Note Streams::.
  201. File: jade.info,  Node: Process States,  Next: Signalling Processes,  Prev: Process I/O,  Up: Processes
  202. Process States
  203. --------------
  204.    Each process object has a "state" associated with it; this depends on
  205. the status of the subprocess currently running on the process object (or
  206. not as the case may be).
  207.    The possible states are,
  208. "running"
  209.      This state means that the subprocess using this process object is
  210.      currently running, i.e. it hasn't been stopped.
  211. "stopped"
  212.      Means that the subprocess has been temporarily suspended from
  213.      running.
  214. "unused"
  215.      This means that the process object is free to have a new
  216.      subprocess created on it.
  217.    Predicates exist which test whether a given process object is in one
  218. of these states.
  219.  - Function: process-running-p PROCESS-OBJECT
  220.      Returns `t' when PROCESS-OBJECT is in the running state.
  221.  - Function: process-stopped-p PROCESS-OBJECT
  222.      Returns `t' when PROCESS-OBJECT is in the stopped state.
  223.  - Function: process-in-use-p PROCESS-OBJECT
  224.      Returns `t' when PROCESS-OBJECT is *not* in the unused state.
  225.    The following two functions are used to stop and then subsequently
  226. continue a process running.
  227.  - Function: stop-process PROCESS-OBJECT &optional WHOLE-GROUP
  228.      This function suspends execution of the subprocess running on the
  229.      process object PROCESS-OBJECT.
  230.      If WHOLE-GROUP is non-`nil' all subprocesses in the process group
  231.      of PROCESS-OBJECT are stopped.
  232.  - Function: continue-process PROCESS-OBJECT &optional WHOLE-GROUP
  233.      Use this function to continue a subprocess executing after it has
  234.      been stopped (by the `stop-process' function).
  235.      If WHOLE-GROUP is non-`nil' all subprocesses in the process group
  236.      of PROCESS-OBJECT are continued.
  237.    The state change function component of a process object defines a
  238. function which will be called each time the state of the process object
  239. changes. If your program needs to be informed when an asynchronous
  240. process terminates this function is the way to do it.
  241.  - Function: process-function PROCESS
  242.      Returns the value of the state change function component of the
  243.      process object PROCESS.
  244.  - Function: set-process-function PROCESS FUNCTION
  245.      Sets the value of the state change function component of the
  246.      process object PROCESS to the function FUNCTION, then returns
  247.      FUNCTION.
  248. File: jade.info,  Node: Signalling Processes,  Next: Process Information,  Prev: Process States,  Up: Processes
  249. Signalling Processes
  250. --------------------
  251.  - Function: signal-process PROCESS-OBJECT SIGNAL-NUMBER &optional
  252.           WHOLE-GROUP
  253.      If the process object PROCESS-OBJECT is being used to run an
  254.      asynchronous subprocess send the signal numbered SIGNAL-NUMBER to
  255.      it.
  256.      When the optional argument WHOLE-GROUP is non-`nil' the signal is
  257.      also sent to all processes in the process group of the subprocess.
  258.    The following functions use the `signal-process' function to send
  259. some common signals to processes.
  260.  - Function: interrupt-process PROCESS-OBJECT &optional WHOLE-GROUP
  261.      Sends the `SIGINT' signal to PROCESS-OBJECT.
  262.           (interrupt-process PROCESS-OBJECT WHOLE-GROUP)
  263.           ==
  264.           (signal-process PROCESS-OBJECT `SIGINT' WHOLE-GROUP)
  265.  - Function: kill-process PROCESS-OBJECT &optional WHOLE-GROUP
  266.      Sends the `SIGKILL' signal to the PROCESS-OBJECT.
  267.           (kill-process PROCESS-OBJECT WHOLE-GROUP)
  268.           ==
  269.           (signal-process PROCESS-OBJECT `SIGKILL' WHOLE-GROUP)
  270.    Note that the functions `stop-process' and `continue-process' also
  271. send signals to the subprocess.
  272. File: jade.info,  Node: Process Information,  Next: Interactive Processes,  Prev: Signalling Processes,  Up: Processes
  273. Process Information
  274. -------------------
  275.  - Function: process-id PROCESS-OBJECT
  276.      This function returns the operating-system identifier associated
  277.      with the subprocess currently running on the process object
  278.      PROCESS-OBJECT.
  279.  - Function: process-exit-value PROCESS-OBJECT
  280.      Returns the integer representing the return code of the last
  281.      subprocess to be run on PROCESS-OBJECT.
  282.      If no subprocess has been run on PROCESS-OBJECT, PROCESS-OBJECT is
  283.      currently in the running state or the last subprocess exited
  284.      abnormally (i.e. from a terminal signal) `nil' is returned.
  285.  - Function: process-exit-status PROCESS-OBJECT
  286.      This function returns the integer that was the exit status of the
  287.      last subprocess which was run on the process object PROCESS-OBJECT.
  288.      Note that the exit status is *not* the value given to the `exit'
  289.      function in a C program, use the `process-exit-value' to access
  290.      this value.
  291.      If no process has been run on PROCESS-OBJECT, or the process is
  292.      currently in the running state `nil' is returned.
  293. File: jade.info,  Node: Interactive Processes,  Prev: Process Information,  Up: Processes
  294. Interactive Processes
  295. ---------------------
  296.    The Shell mode is usually used to run a shell process in a buffer
  297. (with the `shell' command, *note Shell::.) but in actual fact it is
  298. capable of running (nearly) any type of interactive process. For
  299. example the gdb interface (*note Debugging Programs::.) uses the Shell
  300. mode to handle its user interaction.
  301.    The following buffer-local variables control the Shell mode.
  302.  - Variable: shell-program
  303.      This variable defines the name of the program to execute. By
  304.      default it is the user's shell.
  305.  - Variable: shell-program-args
  306.      A list of arguments which should be given to the process when it is
  307.      started.
  308.  - Variable: shell-prompt-regexp
  309.      This regular expression must match the prompt that the process
  310.      emits each time it waits for input. Its standard value of
  311.      `^[^]#$%>)]*[]#$%>)] *' will need to be tailored to the program
  312.      that you are executing.
  313.  - Variable: shell-callback-function
  314.      Every time the state of the subprocess changes (*note Process
  315.      States::.) this function is called in the context of the process'
  316.      buffer.
  317.  - Variable: shell-output-stream
  318.      All output from the subprocess is copied to this output stream. If
  319.      it is `nil' all output goes to the end of the process' buffer.
  320.      Note that this variable is only referenced when the process is
  321.      started.
  322.    To use the Shell mode to create an interface with a program simply
  323. use the following steps.
  324.   1. Select the buffer which you want to run the subprocess in. The
  325.      value of the `buffer-file-name' attribute of the buffer defines the
  326.      working directory of the subprocess.
  327.   2. Set the variables described above to suitable values.
  328.   3. Call the `shell-mode' function.
  329.   4. Reset the values of the `mode-name' and `major-mode' if necessary
  330.      and install your own keymaps.
  331.      Remember that commands essential to the Shell mode (and hence your
  332.      program) are contained in the two keymaps `shell-keymap' and
  333.      `shell-ctrl-c-keymap'. If you need to bind your own commands to
  334.      either of these prefixes make copies of these keymaps (using the
  335.      function `copy-sequence') and bind to the copies.
  336.      For example the gdb interface installs its own key bindings from
  337.      the `Ctrl-c' prefix by doing the following in its initialisation.
  338.           (defvar gdb-ctrl-c-keymap (copy-sequence shell-ctrl-c-keymap))
  339.           (bind-keys gdb-ctrl-c-keymap
  340.            ;; Gdb mode `Ctrl-c' prefix bindings follow
  341.            ...
  342.  - Function: shell-mode
  343.      This function installs the Shell mode and starts a subprocess
  344.      running in the current buffer.
  345.      The variables `shell-program', `shell-program-args',
  346.      `shell-prompt-regexp', `shell-callback-function' and
  347.      `shell-output-stream' control the program executed and how it will
  348.      execute.
  349.      The process object created is stored in the buffer-local variable
  350.      `shell-process'.
  351.  - Variable: shell-process
  352.      This buffer-local variable contains the process object which the
  353.      Shell mode started running in this buffer. If it is `nil' no such
  354.      process exists.
  355.  - Variable: shell-keymap
  356.      The root keymap of the Shell mode.
  357.  - Variable: shell-ctrl-c-keymap
  358.      The keymap containing the key bindings of the commands in Shell
  359.      mode with a prefix of `Ctrl-c'.
  360.    See the Lisp program `gdb.jl' for an example of how to use the Shell
  361. mode as the user interface with an external program.
  362. File: jade.info,  Node: Miscellaneous Functions,  Next: Debugging,  Prev: Processes,  Up: Programming Jade
  363. Miscellaneous Functions
  364. =======================
  365.    This section of the manual documents functions and features which
  366. don't comfortably fit elsewhere in this manual.
  367. * Menu:
  368. * System Information::          Getting details about the host
  369. * User Information::            The name of the user
  370. * Environment Variables::       Reading and writing the environment
  371. * System Time::                 Getting the current time
  372. * Revision Information::        How to check Jade's revision numbers
  373. File: jade.info,  Node: System Information,  Next: User Information,  Up: Miscellaneous Functions
  374. System Information
  375. ------------------
  376.  - Function: x11-p
  377.      This function returns `t' when Jade is running on the X11 window
  378.      system.
  379.  - Function: unix-p
  380.      This function returns `t' when Jade is running on a variant of the
  381.      Unix operating system.
  382.  - Function: amiga-p
  383.      This function returns `t' when Jade is running on an Amiga.
  384.  - Function: system-name
  385.      This function returns a string naming the host that Jade is
  386.      running on. When possible this will include the name of the domain
  387.      as well.
  388.      In the Amiga version of Jade the environment variable `HOSTNAME' is
  389.      assumed to contain the host's name.
  390. File: jade.info,  Node: User Information,  Next: Environment Variables,  Prev: System Information,  Up: Miscellaneous Functions
  391. User Information
  392. ----------------
  393.  - Function: user-login-name
  394.      This function returns a string containing the login name of the
  395.      user.
  396.      In the Amiga version this is taken from the environment variable
  397.      `USERNAME'.
  398.           (user-login-name)
  399.               => "jsh"
  400.  - Function: user-real-name
  401.      This function returns a string containing the `real' name of the
  402.      user; the format of the string will depend on the host system.
  403.      In the Amiga version this is taken from the `REALNAME' environment
  404.      variable.
  405.           (user-real-name)
  406.               => "John Harper"
  407.  - Function: user-home-directory
  408.      This function returns the name of the user's home directory
  409.      terminated by a slash character (`/').
  410.      The first place this is looked for is in the `HOME' environment
  411.      variable; if this variable doesn't exist we either use the `SYS:'
  412.      logical device in AmigaDOS or consult the passwd file when in Unix.
  413.           (user-home-directory)
  414.               => "/home/jsh/"
  415. File: jade.info,  Node: Environment Variables,  Next: System Time,  Prev: User Information,  Up: Miscellaneous Functions
  416. Environment Variables
  417. ---------------------
  418.  - Function: getenv VARIABLE-NAME
  419.      This function returns the value (a string) of the environment
  420.      variable called VARIABLE-NAME. If the specified variable doesn't
  421.      exist `nil' is returned.
  422.           (getenv "OSTYPE")
  423.               => "Linux"
  424.  - Function: setenv VARIABLE-NAME NEW-VALUE
  425.      This function sets the value of the environment variable called
  426.      VARIABLE-NAME to NEW-VALUE. NEW-VALUE can either be a string
  427.      containing the new contents of the variable or `nil', in which
  428.      case the environment variable is deleted.
  429. File: jade.info,  Node: System Time,  Next: Revision Information,  Prev: Environment Variables,  Up: Miscellaneous Functions
  430. System Time
  431. -----------
  432.    No matter what operating system Jade is running on it always an
  433. integer to store a time value. Generally this will be the number of
  434. seconds since some previous date.
  435.    The only thing a Lisp program is allowed to assume about a time
  436. value is that as time passes the time value *increases*. This means
  437. that it's possible to compare two time values and know which is the
  438. newer.
  439.  - Function: current-time
  440.      Returns an integer denoting the current time.
  441.           (current-time)
  442.               => 780935736
  443.  - Function: current-time-string
  444.      This function returns a string stating the current time and date
  445.      in a fixed format. An example of the format is,
  446.           Fri Sep 30 15:20:56 1994
  447.      Each field will always be in the same place, for example,
  448.           Thu Sep  1 12:13:14 1994
  449.           (current-time-string)
  450.               => "Fri Sep 30 15:20:56 1994"
  451. File: jade.info,  Node: Revision Information,  Prev: System Time,  Up: Miscellaneous Functions
  452. Revision Information
  453. --------------------
  454.  - Function: major-version-number
  455.      This function returns a number defining the major version of the
  456.      editor.
  457.           (major-version-number)
  458.               => 3
  459.  - Function: minor-version-number
  460.      Returns a number defining the minor version of the editor.
  461.           (minor-version-number)
  462.               => 2
  463. File: jade.info,  Node: Debugging,  Next: Tips,  Prev: Miscellaneous Functions,  Up: Programming Jade
  464. Debugging
  465. =========
  466.    When you have written a Lisp program you will have to debug it
  467. (unless all your programs work first time?). There are two main classes
  468. of errors; syntax errors and semantic errors.
  469.    Syntax errors occur when the text you've typed out to represent your
  470. program is not a valid representation of a Lisp object (since a program
  471. is simply an ordered set of Lisp objects). When you try to load your
  472. program the Lisp reader will find the syntax error and tell you about,
  473. unfortunately though it probably won't be able to tell you exactly
  474. where the error is.
  475.    The most common source of syntax errors is too few or too many
  476. parentheses; the `Ctrl-Meta-f' and `Ctrl-Meta-b' commands can be used
  477. to show the structure of the program as the Lisp reader sees it.
  478.    Semantic errors are what we normally call bugs -- errors in logic,
  479. the program is syntactically correct but doesn't do what you want it
  480. to. For these types of errors Jade provides a simple debugger which
  481. allows you to single step through the Lisp forms of your program as
  482. they are being evaluated.
  483.    There are several ways to enter the Lisp debugger; functions can be
  484. marked so that they cause the debugger to be entered when they are
  485. called, breakpoints can be written in functions or it can be called
  486. explicitly with a form to step through.
  487.  - Command: trace SYMBOL
  488.      This command marks the symbol SYMBOL so that each time the function
  489.      stored in the function cell of SYMBOL is called the debugger is
  490.      entered immediately.
  491.      When called interactively SYMBOL is prompted for.
  492.  - Command: untrace SYMBOL
  493.      The opposite of `trace' -- unmarks the symbol.
  494.  - Function: break
  495.      This function causes the debugger to be entered immediately. By
  496.      putting the form `(break)' at suitable points in your program
  497.      simple breakpoints can be created.
  498.  - Command: step FORM
  499.      This function invokes the debugger to step through the form FORM.
  500.      When called interactively FORM is prompted for.
  501.    Whenever the Lisp debugger is entered the form waiting to be
  502. evaluated is printed at the bottom of the buffer, at this point the
  503. special debugger commands available are,
  504. `Ctrl-c Ctrl-s'
  505.      Step into the current form; this means that in a list form the
  506.      debugger is used to evaluated each argument in turn.
  507. `Ctrl-c Ctrl-i'
  508.      Ignore the current form; makes the current form immediately return
  509.      `nil'.
  510. `Ctrl-c Ctrl-n'
  511.      Continue evaluating forms normally until the next form at the
  512.      current level is entered, then re-enter the debugger.
  513. `Ctrl-c Ctrl-r'
  514.      Continue execution normally. Note that this command is the one to
  515.      use when an error has been trapped.
  516. `Ctrl-c Ctrl-b'
  517.      Print a backtrace of the current Lisp call stack, note that calls
  518.      of primitive functions aren't currently recorded in this stack.
  519. `Ctrl-c Ctrl-x'
  520.      Prompt for a Lisp form, evaluate it and return this value as the
  521.      result of the current form.
  522.    After the form has been evaluated (i.e. after you've typed one of the
  523. commands above) the value of the form is printed in the buffer,
  524. prefixed by the string `=> '.
  525.    Note that it is also possible to make certain types of errors invoke
  526. the debugger immediately they are signalled, see *Note Errors::.
  527. File: jade.info,  Node: Tips,  Prev: Debugging,  Up: Programming Jade
  528.    This section of the manual gives advice about programming in Jade.
  529.    Obviously there is no *need* to religiously follow every single one,
  530. but following these tips will make your programs easier to read and
  531. (hopefully) more efficient overall.
  532.    For advice on getting the most out of the compiler, see *Note
  533. Compilation Tips::.
  534. * Menu:
  535. * Comment Styles::              Differrent types of comments
  536. * Program Layout::              How I lay out the programs I write
  537. * General Tips::                Do's and Don't's of Jade programming
  538. File: jade.info,  Node: Comment Styles,  Next: Program Layout,  Up: Tips
  539. Comment Styles
  540. --------------
  541.    As already described, single-line comments in Lisp are introduced by
  542. a semi-colon (`;') character. By convention a different number of
  543. semi-colons is used to introduce different types of comments,
  544.      A comment referring to the line of Lisp code that it occurs on,
  545.      comments of this type are usually indented to the same depth, on
  546.      the right of the Lisp code. When editing in Lisp mode the command
  547.      `Meta-;' can be used to insert a comment of this type.
  548.      For example,
  549.           (defconst op-call 0x08)            ;call (stk[n] stk[n-1] ... stk[0])
  550.                                           ; pops n values, replacing the
  551.                                           ; function with the result.
  552.           (defconst op-push 0x10)            ;pushes constant # n
  553.      Comments starting with two semi-colons are written on a line of
  554.      their own and indented to the same depth as the next line of Lisp
  555.      code. They describe the following lines of code.
  556.      For example,
  557.           ;; Be sure to remove any partially written dst-file.
  558.           (let
  559.               ((fname (concat file-name ?c)))
  560.             (when (file-exists-p fname)
  561.               (delete-file fname)))
  562.      Comments of this type are also placed before a function definition
  563.      to describe the function. This saves wasting memory with a
  564.      documentation string in a module's internal functions.
  565.      For example,
  566.           ;; Compile a form which occurred at the `top-level' into a
  567.           ;; byte code form.
  568.           ;; defuns, defmacros, defvars, etc... are treated specially.
  569.           ;; require forms are evaluated before being output uncompiled;
  570.           ;; this is so any macros are brought in before they're used.
  571.           (defun comp-compile-top-form (form)
  572.             ...
  573. `;;;'
  574.      This type of comment always starts in the first column of the
  575.      line, they are used to make general comments about a program and
  576.      don't refer to any function or piece of code in particular.
  577.      For example,
  578.           ;;; Notes:
  579.           ;;;
  580.           ;;; Instruction Encoding
  581.           ;;; ====================
  582.           ;;; Instructions which get an argument (with opcodes of zero up to
  583.           ...
  584. `;;;;'
  585.      Each program should have a comment of this type as its first line,
  586.      the body of the comment is the name of the file, two dashes and a
  587.      brief description of what the program does. They always start in
  588.      the first column.
  589.      For example,
  590.           ;;;; compiler.jl -- Simple compiler for Lisp files/forms
  591.    If you adhere to these standards the indentation functions provide by
  592. the Lisp mode will indent your comments to the correct depth.
  593. File: jade.info,  Node: Program Layout,  Next: General Tips,  Prev: Comment Styles,  Up: Tips
  594. Program Layout
  595. --------------
  596.    The layout that I have used for all the Lisp programs included with
  597. Jade is as follows, obviously this isn't ideal but it seems ok.
  598.   1. The first line of the file is the header comment, including the
  599.      name of the file and its general function.
  600.   2. Copyright banner.
  601.   3. Any `require' forms needed followed by a `provide' form for this
  602.      module. The `require' forms should be before the `provide' in case
  603.      the required modules aren't available.
  604.   4. Variable and constant definitions. As a variable is defined any
  605.      initialisation it needs is done immediately afterwards. For example
  606.      a keymap is defined with `defvar' then initialised with the
  607.      `bind-keys' function.
  608.      For example,
  609.           (defvar debug-buffer (make-buffer "*debugger*")
  610.             "Buffer to use for the Lisp debugger.")
  611.           (set-buffer-special debug-buffer t)
  612.           (add-buffer debug-buffer)
  613.           
  614.           (defvar debug-ctrl-c-keymap (make-keylist)
  615.             "Keymap for debugger's ctrl-c prefix.")
  616.           (bind-keys debug-ctrl-c-keymap
  617.             "Ctrl-s" 'debug-step
  618.             ...
  619.   5. Finally the functions which make up the program, it often improves
  620.      readability if the entry points to the program are defined first.
  621. File: jade.info,  Node: General Tips,  Prev: Program Layout,  Up: Tips
  622. General Tips
  623. ------------
  624.    The following are some general items of advice; you don't have to
  625. follow them but they are the result of experience!
  626.    * Jade only has one name-space for all the symbols ever created,
  627.      this could lead to naming clashes if care isn't taken.
  628.      When you write a program all the symbols it creates should be
  629.      prefixed by a name derived from the name of the program in some
  630.      way. For example, in the program `isearch.jl' all functions and
  631.      variable names are prefixed by the string `isearch-', giving
  632.      `isearch-cancel' and so on. Note that the prefix doesn't have to
  633.      be the exact name of the file, the program `buffer-menu.jl' uses
  634.      the prefix `bm-'.
  635.      The entry points to a module (i.e. the names of the commands it
  636.      provides) should *not* have a prefix, simply give them a
  637.      descriptive name (but try not to make it too long!).
  638.      Don't bother giving local variables these prefixes unless they are
  639.      used by several functions in the program.
  640.    * Use the `recursive-edit' function as little as possible; it can be
  641.      *very* confusing for the user! When at all possible use keymaps to
  642.      create user interfaces.
  643.    * Use the Lisp mode to indent your programs; not only does it save a
  644.      lot of time it also makes it easier for other people to read them.
  645.    * Errors should always be reported by either `error' or `signal',
  646.      don't just print a message or call `beep'.
  647.    * Don't redefine existing functions unless absolutely possible: try
  648.      to use hooks. If there is no hook where you want one, mail me
  649.      about it and I may put one in the next release.
  650.    * Don't compile your program until you're sure it works! The
  651.      debugger only works properly with uncompiled code.
  652.    * Use constants sparingly: personally, I only use them where the
  653.      constants are numeric.
  654.    * Remember to define macros before they are used, otherwise they
  655.      won't be compiled inline. The same can happen if you don't
  656.      `require' a file that a macro is defined in before using the macro
  657.      definition.
  658.    * As I said in the compilation tips (*note Compilation Tips::.), try
  659.      to use iteration instead of recursion. Also the `memq' and `assq'
  660.      types of functions can be used to search some types of list
  661.      structures very quickly.
  662.    * When writing modes don't bind any unmodified keys to the prefix
  663.      `Ctrl-c', these are reserved for customisation by users.
  664. File: jade.info,  Node: Reporting Bugs,  Next: Function Index,  Prev: Programming Jade,  Up: Top
  665. Reporting Bugs
  666. **************
  667.    If you think you've found a bug in Jade I want to know about it,
  668. there is a list of problems that I am aware of in the `src/BUGS' file,
  669. if yours appears in there tell me anyway to make me fix it.
  670.    When submitting bug reports I need to know as much as possible, both
  671. about the problem and the circumstances in which it occurs. In general,
  672. send me as much information as possible, even if you think it's probably
  673. irrelevant.
  674.    If you can, contact me via email, my address is `jsh@ukc.ac.uk'.  If
  675. you don't get a reply within about a week it's probably a university
  676. vacation -- this means that I won't get your message for a while; if
  677. it's important try my postal address, this is,
  678.      John Harper
  679.      91 Springdale Road
  680.      Broadstone
  681.      Dorset
  682.      BH18 9BW
  683.      England
  684.    As well as bugs I'm interested in any comments you have about the
  685. editor, even if you just tell me you hate it (as long as you say *why*
  686. you hate it!).
  687.